#include <iostream>
#include <vector>
#include <algorithm>
#include <map>

using namespace std;

#define int long long


int solve(vector<int>& nums) {

    map<int, int> mp;
    int m = nums.size();
    for (int i = 0; i < m; i++) {
        mp[nums[i]]++;
    }
    vector<pair<int, int>> q;
    for (auto x : mp) {
        q.push_back({ x.first,x.second });
    }
    sort(q.begin(), q.end());
    vector<int> dp(q.size() + 1);
    int n = q.size();
    dp[1] = q[0].first * q[0].second;
    for (int i = 2; i <= n; i++) {
        dp[i] = dp[i - 1];
        if (q[i - 2].first + 1 != q[i - 1].first) {
            dp[i] += q[i - 1].first * q[i - 1].second;
        }
        else {
            dp[i] = max(q[i - 1].first * q[i - 1].second + dp[i - 2], dp[i - 1]);
        }
    }
    return dp[n];
}

signed main() {
    ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    vector<int> nums = { 3,4,2 };
    solve(nums);
    return 0;
}
//const int mod = 1e9 + 7;
//class Solution {
//public:
//    int countHousePlacements(int n) {
//        vector<vector<long long>> dp(n + 1, vector<long long>(5));
//        dp[1][1] = dp[1][2] = dp[1][3] = dp[1][4] = 1;
//        for (int i = 2; i <= n; i++) {
//            for (int j = 1; j <= 4; j++) {
//                dp[i][1] = (dp[i - 1][1] + dp[i - 1][2] + dp[i - 1][3] + dp[i - 1][4]) % mod;
//                dp[i][2] = (dp[i - 1][1] + dp[i - 1][3]) % mod;
//                dp[i][3] = (dp[i - 1][1] + dp[i - 1][1]) % mod;
//                dp[i][4] = dp[i - 1][1];
//            }
//        }
//        long long res = (dp[n][1] + dp[n][2] + dp[n][3] + dp[n][4]) % mod;
//        return res;
//    }
//};


//int n;
//int die[1000006], fa[1000006];
//bool ye[1000006];
//vector<int> e[1000006];
//
//bool dfs(int u, int fa) {
//	if (ye[u])return true;
//	if (die[u] >= e[u].size())return false;
//	bool res = true;
//	for (int v : e[u]) {
//		res &= dfs(v, u);
//	}
//	return res;
//}
//
//void solve() {
//	cin >> n;
//	for (int i = 1; i <= n; i++) {
//		cin >> die[i];
//		ye[i] = true;
//	}
//	for (int i = 2; i <= n; i++) {
//		cin >> fa[i];
//		e[fa[i]].push_back(i);
//		ye[fa[i]] = false;
//	}
//	if (dfs(1, 0)) {
//		cout << "YES\n";
//	}
//	else {
//		cout << "NO\n";
//	}
//}


//class Solution {
//public:
//    const int mod = 1000000007;
//    int countTexts(string pressedKeys) {
//        int n = pressedKeys.size();
//        vector<int> dp(n + 1);
//        dp[0] = 1;
//        for (int i = 1; i <= n; i++) {
//            int j = i - 1;
//            while (j >= 0 && pressedKeys[j] == pressedKeys[i - 1]) {
//                dp[i] = (dp[i] + dp[j]) % mod;
//                j--;
//            }
//        }
//        return dp[n];
//    }
//};

//class Solution {
//public:
//    const int mod = 1e9 + 7;
//    int countGoodStrings(int low, int high, int zero, int one) {
//        vector<int> dp(high + 1);
//        dp[0] = 1;
//        int ans = 0;
//        for (int i = 1; i <= high; i++) {
//            if (i - one >= 0) {
//                dp[i] = (dp[i] + dp[i - one]) % mod;
//            }
//            if (i - zero) {
//                dp[i] = (dp[i - zero] + dp[i]) % mod;
//            }
//            if (i >= low) {
//                ans = (ans + dp[i]) % mod;
//            }
//        }
//        return ans;
//    }
//};
//class Solution {
//public:
//    int combinationSum4(vector<int>& nums, int target) {
//        vector<int> dp(target + 1);
//        dp[0] = 1;
//        for (int i = 1; i <= ; i++) {
//            for (int j = 0; j < nums.size(); j++) {
//                if (nums[j] <= i) {
//                    dp[i] += dp[i - nums[j]];
//                }
//            }
//        }
//        return dp[target];
//    }
//};
//class Solution {
//public:
//    int combinationSum4(vector<int>& nums, int target) {
//        int n = nums.size();
//        vector<vector<int>> dp(n + 1, vector<int>(target + 1));
//        for (int i = 1; i <= n; i++) {
//            for (int j = 1; j <= target; j++) {
//                if (j >= nums[i - 1]) {
//                    dp[i][j] += dp[i][j - nums[i - 1]] + 1;
//                }
//                if (i >= 2 && j > nums[i - 2]) {
//                    dp[i][j] += dp[i - 1][j - nums[i - 2]];
//                }
//            }
//        }
//        return dp[n][target];
//    }
//};
//signed main() {
//	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
//    vector<int> a = { 1,2,3 };
//    int res=Solution().countTexts("2222");
//	cout<<res;
//    return 0;
//}